package es.albarregas.ajax;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Enumeration;
import java.util.GregorianCalendar;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import es.albarregas.modelo.ModelFacade;
import es.albarregas.modelo.Producto;
import es.albarregas.pojo.Factura;
import es.albarregas.pojo.LineaPedido;
import es.albarregas.pojo.Pedido;

public class FinalizarCompra extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public FinalizarCompra() {

	}

	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String respuestaHTML = "";
		Enumeration<String> vectorParametros = request.getParameterNames();
		response.setContentType("text/html;charset=UTF-8");
		String cadenaWhere = "";
		String cadenaIn = "";
		String numeroPedido = request.getParameter("numeroPedido");
		String codigoPostal = request.getParameter("codigoPostal");

		String nombre = request.getParameter("nombre");
		String dni = request.getParameter("dni");
		String apellidos = request.getParameter("apellidos");
		String direccion = request.getParameter("direccion");
		String provincia = request.getParameter("provincia");
		String localidad = request.getParameter("localidad");
		String formaPago = request.getParameter("formaPago");

		String baseImponible = request.getParameter("baseImponible");
		String descuento = request.getParameter("descuento");
		String iva = request.getParameter("iva");
		String GastosDeEnvio = request.getParameter("GastosDeEnvio");

		// TODO QUITAR
		System.out.println("FINALIZAR COMPRA--> nombre-->" + nombre + "-DNI-->" + dni + "-Apellidos-->" + apellidos + "-Direccion-->" + direccion + "-codigoPostal-->" + codigoPostal
		    + "-provincia-->" + provincia + "-localidad-->" + localidad + "-numeroPedido-->" + numeroPedido);
		// QUEREMOS CONSTRUIR UNA CADENA IN SOLO CON LOS PRODUCTOS DEL CARRITO
		// NO ELIMINADOS
		while (vectorParametros.hasMoreElements()) {
			String nombreParametro = vectorParametros.nextElement();
			System.out.println("nombre del parametro -->" + nombreParametro);
			if (!nombreParametro.equals("numeroPedido") && !nombreParametro.equals("codigoPostal") && !nombreParametro.equals("nombre") && !nombreParametro.equals("apellidos")
			    && !nombreParametro.equals("direccion") && !nombreParametro.equals("provincia") && !nombreParametro.equals("localidad") && !nombreParametro.equals("baseImponible")
			    && !nombreParametro.equals("descuento") && !nombreParametro.equals("iva") && !nombreParametro.equals("GastosDeEnvio")) {
				if (cadenaIn.equals("")) {
					cadenaIn += "in ('" + nombreParametro + "'";
				} else {
					cadenaIn += ",'" + nombreParametro + "'";
				}
			}
		}

		if (!cadenaIn.trim().equals("")) {
			cadenaIn += ")";
			cadenaWhere = " WHERE CodigoProducto not " + cadenaIn;
		}

		System.out.println("where para eliminar productos --> " + cadenaWhere);
		// -------------- Eliminamos de la linea de pedido los pedidos que ha
		// rechazado en el ultimo momento
		ModelFacade.borrarLineaPedido(cadenaWhere);
		Calendar calendario = GregorianCalendar.getInstance();
		java.util.Date fecha = calendario.getTime();
		SimpleDateFormat formatoDeFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Pedido pedido = ModelFacade.getPedidoEstadoN(numeroPedido);
		pedido.setBaseImponible(Double.parseDouble(baseImponible));
		pedido.setDescuento(Double.parseDouble(descuento));
		pedido.setIva(Double.parseDouble(iva));
		pedido.setGastosDeEnvio(Double.parseDouble(GastosDeEnvio));
		pedido.setEstado("P");
		pedido.setFecha(formatoDeFecha.format(fecha));
		pedido.setDireccion(direccion);
		pedido.setCodigoPostal(codigoPostal);
		pedido.setProvincia(provincia);
		pedido.setLocalidad(localidad);

		ModelFacade.actualizarPedido(pedido);

		// --------------------------- AQUI VAMOS A MODIFICAR EL STOCK
		// -----------

		Collection<LineaPedido> listaPedidos = ModelFacade.getLineaPedido(" WHERE numeroPedido=" + numeroPedido);

		for (LineaPedido lineaPedido : listaPedidos) {
			System.out.println(lineaPedido.getCodigoProducto());
			Collection<Producto> listaProductos = ModelFacade.getProducto(" WHERE codigo='"+lineaPedido.getCodigoProducto()+"'" );
			Producto producto = null;
			for (Producto productoAux : listaProductos) {
			    producto = productoAux;
			}
			Integer stockActualizado=producto.getStock()-lineaPedido.getCantidad();
			System.out.println("Stock actualizado -->"+stockActualizado);
			producto.setStock(stockActualizado);
			producto.setFechaIntro(producto.getFechaSinFormatear());
			System.out.println(producto.getFechaSinFormatear());
			ModelFacade.actualizarProducto(producto);			
		}
		
		// ------------------------ AQUI VAMOS A CREAR LA FACTURA
		// ----------------------------------------

		Factura factura = new Factura();
		factura.setNumeroPedido(pedido.getNumeroPedido());
		factura.setNombre(nombre);
		factura.setApellidos(apellidos);
		factura.setNif(dni);
		factura.setDireccion(direccion);
		factura.setCodigoPostal(codigoPostal);
		factura.setProvincia(provincia);
		factura.setLocalidad(localidad);
		factura.setFormaPago(formaPago);
		factura.setNif(dni);
		factura.setFormaPago(formaPago);
		ModelFacade.crearFactura(factura);
		// -------------------------------------------------------
		Double cantidadIva = pedido.getBaseImponible() * (pedido.getIva() / 100);
		Double totalPedido = pedido.getBaseImponible() + cantidadIva - pedido.getDescuento() + pedido.getGastosDeEnvio();
		respuestaHTML = "<div class=\"contenedorFactura\">" + "<table class=\"TABLEFactura\">" +

		"<tr>" + "<th colspan=\"2\">DATOS DE ENVIO</th></td>" + "</tr>" + "<tr>" + "<td >nombre y apellidos</td><td>" + nombre + " " + apellidos + "</td>" + "</tr>" + "<tr>"
		    + "<td >Direccion</td><td>" + direccion + "</td>" + "</tr>" + "<tr>" + "<td></td><td>" + pedido.getLocalidad() + "(" + pedido.getProvincia() + ")</td>" + "</tr>" + "<tr>"
		    + "<td></td><td>" + pedido.getCodigoPostal() + "</td>" + "</tr>" + "<tr >" + "<th colspan=\"2\">DATOS DEL PEDIDO</th>" + "<tr>" + "<td>Numero del pedido</td><td>"
		    + pedido.getNumeroPedido() + "</td></tr>" + "<tr>" + "<td>Fecha</td><td>" + pedido.getFecha() + "</td></tr>" + "<tr>" + "<td>Base imponible</td><td>"
		    + pedido.getBaseImponible() + "</td></tr>" + "<td>Iva(" + pedido.getIva() + "%)</td><td>" + cantidadIva + "</td></tr>" + "<tr>" + "<td>Descuento</td><td>"
		    + pedido.getDescuento() + "</td></tr>" + "<tr>" + "<tr>" + "<td>Gastos de envio </td><td>" + pedido.getGastosDeEnvio() + "</td></tr>" + "<tr>" + "<tr>"
		    + "<td style=\"font-weight: bolder;\">TOTAL</td><td style=\"font-weight: bolder;\">" + totalPedido + "</td></tr>" + "<tr>"
		    + "<td><a href=\"VisListarProductos.jsp\">Volver a productos</a></td><td><a  TARGET=\"_blank\" href=\"ctlProcesarFactura?numPedido=" + pedido.getNumeroPedido()
		    + "\">Imprimir</a></td></tr>" + "</table>  ";

		PrintWriter out = response.getWriter();
		try {
			out.print(respuestaHTML);
		} finally {
			out.close();
		}
	}

}
